classdef hparams < handle

  properties (Constant)
    A=sqrt(3)*pi/18 - log(3)/2;
  end

  % parameters that are cast in stone once initialized with the constructor
  properties (GetAccess='public', SetAccess='private')

    % background T offset
    Temp   = 1

    % number of samples in each dimension
    Nx        = 32
    Ny        = 32

    % physical size in each dimension
    Lx        = 100
    Ly        = 100

    % physical cell values 
    Cx
    Cy

    % physical distance between adj cells
    Dx
    Dy

    Dt
  end

  properties
    % time steps
    Tbegin = 0
    Tfinal
    Tsteps

    % control flags
    
    plotHydro = false;

    hydroOrder = 2;

    timeOrder = 4;

    hydroSave      = true;
    hydroSaveParts = 1;

    % **********************
    % initial conditions
    % **********************
    hydroRandGradOn   = false;
    hydroRandGradFreq = 0;

    hydroPureWave = false;
    hydroPureWaveFreq = 1;
    hydroPureWaveAmp = 0.01;

    hydroPeak = false;
    hydroPeakAmp = 0.1;
    hydroPeakRelWidth = 0.1;

    hydroVortices = false
    hydroVorticesParams = [] % [x, y, width, strength]
    % **********************


  end
  methods 
    function obj=hparams(Temp, Nx, L, Tfinal, Tsteps)

      obj.Tbegin = 0;
      obj.Tfinal = Tfinal;
      obj.Tsteps = Tsteps;

      obj.Temp = Temp;
      
      % number of samples
      obj.Nx = Nx; 
      obj.Ny = Nx;

      obj.Lx = L;
      obj.Ly = L;

      % cell values
      obj.Cx = (0:obj.Nx-1)/obj.Nx*obj.Lx;
      obj.Cy = (0:obj.Ny-1)/obj.Ny*obj.Ly;

      obj.Dx = obj.Lx / obj.Nx;
      obj.Dy = obj.Ly / obj.Ny;
      obj.Dt = obj.Tfinal ./ obj.Tsteps;
    end

  end
end
